<?php
// +----------------------------------------------------------------------
// | ThinkPHP
// +----------------------------------------------------------------------
// | Copyright (c) 2008 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
// $Id$

function runThink() {
    // 导入公共类 使用命名空间方式
    $_autoload	=	C('AUTO_LOAD_CLASS');
    if(!empty($_autoload)) {
        $import	=	explode(',',$_autoload);
        foreach ($import as $key=>$class){
            import($class);
        }
    }
    //创建Action控制器实例
    if(defined('C_MODULE_NAME')) {
        // 使用组件模块
        initComponent();
        // 实例化组件模块
        $module  =  A(C_MODULE_NAME);
    }else{
        $module  =  A(MODULE_NAME);
    }
    if(!$module) {
        // 如果存在Empty模块
        $module	=	A("Empty");
        if(!$module) {
            // 模块不存在 抛出异常
            throw_exception(L('_MODULE_NOT_EXIST_').MODULE_NAME);
        }
    }
    // 获取当前操作名
    $action = ACTION_NAME.C('ACTION_SUFFIX');
    //如果存在前置操作，首先执行
    if (method_exists($module,'_before_'.$action)) {
        $module->{'_before_'.$action}();
    }
    // 获取标签集
    $module->{$action}(); // 执行操作
    //如果存在后置操作，继续执行
    if (method_exists($module,'_after_'.$action)) {
        $module->{'_after_'.$action}();
    }
}
// 初始化组件
function initComponent() {
    // 加载组件配置文件
    if(file_exists(LIB_PATH.COMPONENT_NAME.'/Conf/config.php'))
        C(array_change_key_case(include LIB_PATH.COMPONENT_NAME.'/Conf/config.php'));
    // 加载组件公共文件
    if(file_exists(LIB_PATH.COMPONENT_NAME.'/Common/common.php'))
        include LIB_PATH.COMPONENT_NAME.'/Common/common.php';
    // 加载组件语言文件
    if (file_exists(LIB_PATH.COMPONENT_NAME.'/Lang/'.LANG_SET.'.php'))
        L(include LIB_PATH.COMPONENT_NAME.'/Lang/'.LANG_SET.'.php');
    // 安装组件
    if(!file_exists(LIB_PATH.COMPONENT_NAME.'/install.ok') && file_exists(LIB_PATH.COMPONENT_NAME.'/Conf/install.php') ){
        include LIB_PATH.COMPONENT_NAME.'/Conf/install.php';
        file_put_contents(LIB_PATH.COMPONENT_NAME.'/install.ok','install ok');
    }
}
Tag::add('app_run','runThink');
?>